// 用于写学生的增删改查接口

var express = require("express");
var router = express.Router();

const Students = require("../models/students");

const jwt = require("jsonwebtoken");

let secret = "I_LOVE_JING";

/* GET home page. */
router.get("/list", function (req, res, next) {
  try {
    // 拿到前端拿过来的参数
    // get请求用req.query进行接受，post请求用req.body进行接受
    // console.log(req.query);

    // 请求以后接受到的都是字符串
    const { name, page, size, token } = req.query;

    let payload = jwt.verify(token, secret);
    console.log(payload);

    // 拿数据库数据
    // Students.find(name ? { name: name } : {}, (err, doc) => {
    //   if (err) throw err;
    //   // doc表示查出来的内容
    //   // console.log(doc);
    //   res.json({
    //     status: 0,
    //     result: doc,
    //   });
    // });

    // xxx.find({}).limit().skip()

    Students.count(name ? { name } : {}, (err, count) => {
      if (err) throw err;
      // exec没什么意义，就是后面可以写回调函数
      Students.find(name ? { name } : {})
        .skip((page - 1) * size)
        .limit(+size)
        .exec((err, doc) => {
          if (err) throw err;
          // doc表示查出来的内容
          // console.log(doc);
          res.json({
            status: 0,
            result: doc,
            count: count,
          });
        });
    });
  } catch (err) {
    res.json({
      status: 9999,
      msg: "token错误",
    });
  }
});

// 删除接口
router.post("/del", (req, res, next) => {
  // console.log(req.body);
  // res.json({
  //   status: 0,
  //   msg: "删除成功",
  // });

  const { id } = req.body;
  if (id) {
    // 删除 模型.remove
    Students.remove({ _id: id }, (err) => {
      if (err) throw err;
      res.json({
        status: 0,
        msg: "删除成功",
      });
    });
  } else {
    res.json({
      status: 1001,
      msg: "参数错误",
    });
  }
});

// 新增接口
router.post("/add", (req, res, next) => {
  const { name, age, sex, address, phone } = req.body;
  // 前端和后端都要做数据的验证的
  if (!name || !age || !sex || !address || !phone) {
    res.json({
      status: 1001,
      msg: "参数错误",
    });
  } else {
    // 如果都传了，就把数据存到数据库
    const student = new Students({
      name: name,
      age: +age,
      sex: +sex,
      address: address,
      phone: +phone,
    });
    // 不是用模型是save，使用实例去save
    student.save((err) => {
      if (err) throw err;
      // 存储成功
      res.json({
        status: 0,
        msg: "新增成功",
      });
    });
  }
});

// 获取单个学员的接口
router.post("/get", (req, res, next) => {
  const { id } = req.body;

  console.log(id);

  // find查到的是数组
  // findOne查到的是对象, 返回的是null
  Students.findOne({ _id: id }, (err, doc) => {
    if (err) throw err;
    if (doc) {
      res.json({
        status: 0,
        doc: doc,
      });
    } else {
      res.json({
        status: 1002,
        doc: "该学员不存在",
      });
    }
  });
});

// 编辑的接口
// 比新增多传一个id
// Students.updateOne({_id: id}, {除了id以外的参数}, () => {})

module.exports = router;
